#!/bin/bash

# Elasticsearch服务器的地址和端口
ELASTICSEARCH_URL="https://es-test.cfhy.work"

# Elasticsearch用户名和密码
USERNAME="elastic"
PASSWORD="1KLz2UNu*d9J"

# 确定要删除的索引前缀(环境名改为外部传参)
INDEX_PREFIX=".ds-cfhy-logs-""$1"
INDEX_PREFIX_1="$2""-cce"

# 指定删除日期区间为2024.01.01到当前日期的前2天(如执行日期为13日，删除11日前所有，11日当天保留)
DATE_FRONT=2024.01.01
DATE_AFTER=$(date -d "2 days ago" +%Y.%m.%d)

# 所有的索引名
INDEX_LIST=$(curl -X GET $ELASTICSEARCH_URL/_cat/indices?v --user $USERNAME:$PASSWORD|awk -F " " '{print $3}')

# 循环遍历索引列表
for INDEX in $INDEX_LIST; do
        # 去掉字符串中最后一个'-'及其后所有内容
        INDEX_FRONT=$(echo "$INDEX" | awk '{sub(/-[^-]*$/, ""); print}')
        # 保留$INDEX的前缀
        INDEX_FOR_PREFIX=$(echo "$INDEX_FRONT" | awk '{sub(/-[^-]*$/, ""); print}')
        # 检查索引是否以指定的前缀开头,或者指定索引开头并且日期处于设定日期中间（2023.10-2023.11）
        if [[ "$INDEX_FOR_PREFIX" == "$INDEX_PREFIX_1" || "$INDEX_FOR_PREFIX" == "$INDEX_PREFIX" && "$INDEX_FRONT" < "${INDEX_PREFIX}-${DATE_AFTER}" && "$INDEX_FRONT" > "${INDEX_PREFIX}-${DATE_FRONT}" ]]; then
                # 如果符合条件，使用Elasticsearch的REST API删除索引，包括身份验证信息
                echo "$INDEX 匹配"
                curl -X DELETE "$ELASTICSEARCH_URL/$INDEX" --user "$USERNAME:$PASSWORD"
                # 截取data_stream
                DATA_STREAM=$(echo "$INDEX" | awk -F'-' '{print $2"-"$3"-"$4"-"$5}')
                response=$(curl -X DELETE "$ELASTICSEARCH_URL/$INDEX" --user "$USERNAME:$PASSWORD")
                if [[ $response == *$INDEX*"is the write index for data stream"*$DATA_STREAM*"and cannot be deleted"* ]]; then
                        echo "$INDEX 删除失败，开始删除数据流"
                        # 如果响应包含指定错误消息，执行删除数据流操作
                        curl -X DELETE $ELASTICSEARCH_URL/_data_stream/$DATA_STREAM --user $USERNAME:$PASSWORD
                        echo "$DATA_STREAM 已删除"
                else
                # 如果响应中没有'true'，也没有特定错误消息，可以执行其他操作
                        echo "可执行其他自定义操作"
                fi
                echo
                echo "$INDEX 已删除"
        fi
done
